package com.xesj.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;

public class JsonParseUtil 
{
	static class Student 
	{
		public String name;
		public String sex;
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
	}
	
	static class Class
	{
		String className;
		List<Student> stuList;
		public String getClassName() {
			return className;
		}
		public void setClassName(String className) {
			this.className = className;
		}
		public List<Student> getStuList() {
			return stuList;
		}
		public void setStuList(List<Student> stuList) {
			this.stuList = stuList;
		}
	}
	
	
	/** 
	 * @Title: objectToJson 
	 * @Description 将 java模型转换成json格式字符串。json键值对对应model的属性名称与属性值。
	 * @param model java模型
	 * @return
	 * @author Du.Wince 
	 * @date 2015年7月31日 下午4:53:38 
	 */
	public static String objectToJson( Object model )
	{
		String jsonStr = "";
		jsonStr = JSON.toJSONString( model );
		return jsonStr;
	}
	
	/** 
	 * @Title: jsonToObeject 
	 * @Description 将json字符串转换成 Java model,如：{k1:v1,k2:[{n1:m1},{n2:m2}]}。
	 * @param json json格式字符串
	 * @param model java模型(javabean)：需要返回的Object类型
	 * @return 
	 * 返回的类型跟model类型一样
	 * @author Du.Wince 
	 * @date 2015年8月4日 上午9:50:13 
	 */
	@SuppressWarnings("unchecked")
	public static <T> T jsonToModel(  String json, Object model )
	{
		try
		{
			T t = null;
			t = (T) JSON.parseObject( json, model.getClass() );
			return t;
		}
		catch ( Exception e )
		{
			e.printStackTrace();
			return null;
		}
	}
	
	/** 
	 * @Title: jsonToListModel 
	 * @Description 将JSON格式数组转换成List<object>对象 
	 * @param jsonArray JSON格式数组
	 * @param model List中存放的模型对象
	 * @return 
	 * @author Du.Wince 
	 * @date 2015年8月20日 下午6:24:41 
	 */
	public static List<Object> jsonArrayToListModel( String jsonArray, Object model )
	{
		List<Object> objList = new ArrayList<Object>();
		JSONArray array = JSON.parseArray( jsonArray );
		int arraySize = array.size();
		for ( int i = 0; i < arraySize; i ++ )
		{
			String jsonStr = array.get( i ).toString();
			model = jsonToModel( jsonStr + "", model );
			objList.add( model );
		}
		
		return objList;
	}
	
	/** 
	* @Title: jsonArrayToListPageData 
	* @Description: 将jsonArray转成List<PageData>
	* @param jsonArray
	* @param pd
	* @return
	* @author lwj
	* @创建时间 2017年11月16日下午5:11:45
	*/
	public static List<PageData> jsonArrayToListPageData( String jsonArray )
	{
		List<PageData> objList = new ArrayList<PageData>();
		JSONArray array = JSON.parseArray( jsonArray );
		int arraySize = array.size();
		for ( int i = 0; i < arraySize; i ++ )
		{
			String jsonStr = array.get( i ).toString();
			PageData pd = parseToPagedata( jsonStr);
			objList.add( pd );
		}
		
		return objList;
	}
	
	/** 
	 * @Title: getJsonString 
	 * @Description 将key，value字符串组装成json字符串
	 * @param key
	 * @param value
	 * @return {key:"value"} 
	 * @author Du.Wince 
	 * @date 2015年11月24日 下午2:40:18 
	 */
	public static String getJsonString( String key, String value )
	{
		return "{" + key + ":\" " + value + "\"}";
	}
	
	/** 
	 * @Title: stringToListMap 
	 * @Description: 将json数组字符串转换成List_map
	 * @param jsonArray [{key:value}{key:value}]
	 * @return List&lt;Map&lt;String,Object&gt;&gt;
	 * @author Du Wince 
	 * @date 2016年5月18日 上午10:40:14 
	 *
	 */
	@SuppressWarnings("unchecked")
	public static List<Map<String,Object>> parseToListMap( String jsonArray )
	{
		try
		{
			//解析数组
			JSONArray array = JSON.parseArray( jsonArray );
			if ( array == null || array.size() == 0 )
			{
				return null;
			}
			List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
			for ( int i = 0; i < array.size(); i ++ )
			{
				String jsonStr = array.getString( i );
				Map<String,Object> map = (Map<String, Object>) JSON.parse( jsonStr );
				listMap.add( map );
			}
			
			return listMap;
		}
		catch ( Exception e )
		{
			e.printStackTrace();
			return null;
		}
	}
	
	/** 
	 * @Title: stringToListString 
	 * @Description: 将json数组转换成list
	 * @param jsonArray [a,b,c]
	 * @return 
	 * @author Du Wince 
	 * @date 2016年5月18日 上午10:46:07 
	 *
	 */
	@SuppressWarnings("unchecked")
	public static List<String> parseToListString( String jsonArray )
	{
		try
		{
			List<Object> list = (List<Object>) JSON.parse( jsonArray );
			if ( list == null )
			{
				return new ArrayList<String>();
			}
			List<String> listStr = new ArrayList<String>();
			int size = list.size();
			for ( int i = 0; i < size; i ++ )
			{
				listStr.add( list.get( i ).toString() );
			}
			
			return listStr;
		}
		catch ( Exception e )
		{
			e.printStackTrace();
			return null;
		}
		
	}
	
	/** 
	 * @Title: jsonToMap 
	 * @Description: 将json转换成map
	 * @param json {key:value,key1:value1}
	 * @return 
	 * @author Du Wince 
	 * @date 2016年5月20日 上午11:28:02 
	 *
	 */
	@SuppressWarnings("unchecked")
	public static Map<String,Object> parseToMap( String json )
	{
		try
		{
			Object mapObj = JSON.parse( json );
			if (mapObj == null )
			{
				return null;
			}
			else
			{
				return (Map<String,Object>)mapObj;
			}
		}
		catch ( Exception e )
		{
			return null;
		}
	}
	
	/** 
	* @Title: parseToPagedata 
	* @Description: 将json字符串转换为PageData
	* @author Du Wince
	* @param jsonStr
	* @return
	* @创建时间 2017年3月13日上午11:25:35
	*/
	@SuppressWarnings("unchecked")
	public static PageData parseToPagedata(String jsonStr)
	{
		try
		{
			Object mapObj = JSON.parse( jsonStr );
			if (mapObj == null )
			{
				return null;
			}
			else
			{
				PageData pd = new PageData();
				Map<String,Object> map = (Map<String,Object>)mapObj;
				Set<String> keySet = map.keySet();
				Iterator<String> ite = keySet.iterator();
				while(ite.hasNext())
				{
					String key = ite.next();
					pd.put(key, map.get(key));
				}
				return pd;
			}
		}
		catch ( Exception e )
		{
			return null;
		}
	}
	
	/** 
	 * @Title: main 
	 * @Description: TODO(这里用一句话描述这个方法的作用) 
	 * @param args 
	 * @author Du.Wince 
	 * @date 2015年8月21日 下午3:59:52 
	 */
	public static void main( String[] args )
	{
		
		/*Student stu = new Student();
		stu.name = "王宝强他爹";
		stu.sex = "M";
		
		String jsonString = objectToJson( stu );
		System.out.println( jsonString );
		
		
		Class Class = new Class();
		Class.setClassName( "一班" );
		List<Student> stuList = new ArrayList<Student>();
		stuList.add( stu );
		
		stu = new Student();
		stu.name = "王宝强";
		stu.sex = "F";
		
		stuList.add( stu );
		
		Class.setStuList( stuList );
		jsonString = objectToJson( Class );
		
		System.out.println( jsonString );*/
		
//		String json = "{\"className\":\"3\",\"stuList\":[{\"name\":\"wq\",\"sex\":\"男\"},{\"name\":\"wq2\",\"sex\":\"女\"}]}";
//		Object obj = jsonToModel( json, Class );
//		Class = (Class)obj;
//		String className = Class.getClassName();
//		stuList = Class.getStuList();
//		for( Student st : stuList )
//		{
//			System.out.println( "班级：" + className + ",学生：" + st.getName() + ",性别：" + st.getSex() );
//		}
//		
//		ResultMsgObject ro = new ResultMsgObject();
//		ro.setReturnCode( "0" );
//		json = JsonParseUtil.objectToJson( ro ) ; 
//		System.out.println( json );
//		ro.setReturnCode( "1" );
//		ro.setReturnValue( stu );
//		json = JsonParseUtil.objectToJson( ro ) ;
//		System.out.println( json );
//		
//		ro = JsonParseUtil.jsonToModel( json, ro );
//		System.out.println( ro.getReturnCode() + "," + ((Map)ro.getReturnValue()).get( "name" ) );
//		
//		
//		Map<String,String> map1 = new HashMap<>();
//		map1.put( "k1", "1" );
//		map1.put( "k2", "2" );
//		json = JsonParseUtil.objectToJson( map1 );
//		System.out.println( json );
//		
//		ro.setReturnCode( "-1" );
//		ro.setReturnValue( "6666" );
//		System.out.println( objectToJson( ro ) );
//		
//		json = "{\"className\":\"222\",\"className2\":\"3333\"}";
//		obj = jsonToModel( json, new Object() );
//		System.out.println( ((Map<String, String>)obj).get( "className" ) );
//		System.out.println( obj.toString() );
		
		/*List<Map<String, Object>> list1 = new ArrayList<>();
		Map<String, Object > map = new HashMap<String, Object>();
		map.put( "key1", "1" );
		map.put( "key2", "2" );
		map.put( "key3", "3" );
		list1.add( map );
		List<Map<String, Object>> list2 = new ArrayList<>();
		Map<String, Object > map2 = new HashMap<String, Object>();
		map2.put( "key1", "1" );
		map2.put( "key2", "2" );
		map2.put( "key3", "3" );
		list2.add( map2 );

		Map<String,Object> map3 = new HashMap<>();
		map3.put( "l1", list1 );
		map3.put( "l2", list2 );
		
		ResultMsgObject rmo = new ResultMsgObject();
		rmo.setReturnCode( "1" );
		rmo.setReturnValue( map3 );
		String json = objectToJson( rmo );
		
		map = new HashMap<>();
		map = JsonParseUtil.jsonToModel( json, map );
		json = map.get( "returnValue" ).toString();
		System.out.println( json );*/
		
		String json = "[{\"Runwayid\":\"10004\"},{\"Runwayid\":\"10005\"}]";
		PageData pd=new PageData();
		List<Map<String, Object>> list=JsonParseUtil.parseToListMap(json);
		String ids="";
		String runwayid="";
		System.out.println(list.toString());
		/*for(Map<String, Object> map:list){
			runwayid =(String) map.get("Runwayid");	
			System.out.println(runwayid);
		}*/
		 List<String> ss=new ArrayList<String>();
		for(int i=0;i<list.size();i++){
			Map<String, Object> map=list.get(i);
			runwayid=(String) map.get("Runwayid");
			//array[i]=runwayid;
			ss.add(runwayid);
			//System.out.println(runwayid);
		}
		System.out.println(ss.toString());
	}
}
